/*
	Class administrator
*/

#ifndef ADMINISTRATOR_H
#define ADMINISTRATOR_H

#include "graph.hpp"
#include "graphFactory.hpp"
#include "searchAlgorithm.hpp"
#include "../logger/logger.hpp"


class Administrator {
private:
	Graph  	graph;
	Logger 	*logger;
	string 	pathFound;
	int 	errorCode;
public:
	/**
	 * Constructor por defecto de la clase Administrator.
	 */
	Administrator();

	/**
	 * Constructor parametrizado de la clase Administrator.
	 */
	Administrator(std::string &fileToParseN, std::string &fileToParseE,std::string &fileConfig,
				int numberOfFieldsN, int numberOfFieldsE,Logger *logger);

	/**
	 * Generador del contenido de la clase Administrator.
	 */
	void create(std::string &fileToParseN, std::string &fileToParseE,std::string &fileConfig,int numberOfFieldsN, int numberOfFieldsE, Logger *logger);

	/**
	 * Metodo que controla la ejecucion de la busqueda del camino optimo.
	 */
	int searchPath(std::string originId, std::string destinyId, int priority);
    
	/**
	 * Metodo para verificar la creacion del grafo.
	 * @return true en caso de tener el grafo creado.
	 * @return false en caso contrario.
	 */
    bool isGraphCreated();

    /**
     * Metodo getter del camino optimo.
     * @return Retorna el camino optimo.
     */
	string getPath();

	/**
	 * Metodo getter del codigo de error.
	 * @return Retorna un entero indicando el codigo de error.
	 */
	int getErrorCode();


	void cleanBestPathValues();

	/**
	 * Destructor de la clase Administrator.
	 */
	virtual ~Administrator();
};

#endif //ADMINISTRATOR_H
